package com.aiassistant;

import com.aiassistant.util.SVGConverter;
import javafx.application.Application;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.scene.image.Image;
import javafx.stage.Stage;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.Objects;

/**
 * AI助手应用程序入口类
 */
public class Main extends Application {

    @Override
    public void start(Stage primaryStage) {
        try {
            // 确保图标文件存在
            checkAndConvertSvgIcons();
            
            // 加载FXML
            FXMLLoader loader = new FXMLLoader();
            InputStream fxmlStream = getClass().getResourceAsStream("/com/aiassistant/view/main.fxml");
            if (fxmlStream == null) {
                System.err.println("无法加载main.fxml文件，请检查路径");
                return;
            }
            loader.setLocation(getClass().getResource("/com/aiassistant/view/main.fxml"));
            Parent root = loader.load(fxmlStream);
            
            // 创建场景
            Scene scene = new Scene(root);
            
            // 加载CSS
            String cssPath = "/com/aiassistant/styles/main.css";
            InputStream cssStream = getClass().getResourceAsStream(cssPath);
            if (cssStream != null) {
                // CSS文件存在，关闭流并添加样式
                cssStream.close();
                scene.getStylesheets().add(getClass().getResource(cssPath).toExternalForm());
                System.out.println("成功加载CSS样式文件");
            } else {
                System.err.println("无法加载CSS样式文件，将使用默认样式");
            }
            
            // 加载图标
            InputStream iconStream = getClass().getResourceAsStream("/com/aiassistant/images/icon.png");
            if (iconStream != null) {
                primaryStage.getIcons().add(new Image(iconStream));
                System.out.println("成功加载应用程序图标");
            } else {
                System.err.println("无法加载应用程序图标");
            }
            
            // 设置窗口属性
            primaryStage.setTitle("AI助手");
            primaryStage.setScene(scene);
            primaryStage.setMinWidth(800);
            primaryStage.setMinHeight(600);
            primaryStage.show();
        } catch (Exception e) {
            System.err.println("应用程序启动失败: " + e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 检查并转换SVG图标为PNG
     */
    private void checkAndConvertSvgIcons() {
        try {
            // 检查图标目录
            String imagesDir = "src/main/resources/com/aiassistant/images";
            System.out.println("正在将SVG图标转换为PNG...");
            
            // 创建目录（如果不存在）
            Files.createDirectories(Paths.get(imagesDir));
            
            // 递归转换所有SVG为PNG
            convertSvgFilesInDirectory(new File(imagesDir));
            
            System.out.println("SVG图标转换完成");
        } catch (Exception e) {
            System.err.println("转换图标时出错: " + e.getMessage());
            e.printStackTrace();
        }
    }
    
    /**
     * 递归转换目录中的所有SVG文件为PNG
     */
    private void convertSvgFilesInDirectory(File directory) {
        if (!directory.isDirectory()) {
            return;
        }
        
        // 处理当前目录中的SVG文件
        File[] svgFiles = directory.listFiles((d, name) -> name.toLowerCase().endsWith(".svg"));
        if (svgFiles != null && svgFiles.length > 0) {
            for (File svgFile : svgFiles) {
                try {
                    String pngFile = svgFile.getAbsolutePath().replaceAll("\\.svg$", ".png");
                    // 如果PNG文件不存在或SVG文件更新时间更新，则转换
                    File pngFileObj = new File(pngFile);
                    if (!pngFileObj.exists() || svgFile.lastModified() > pngFileObj.lastModified()) {
                        SVGConverter.convertSvgToPng(svgFile.getAbsolutePath(), pngFile, 256, 256);
                        System.out.println("已转换: " + svgFile.getName() + " 到 " + new File(pngFile).getName());
                    }
                } catch (Exception e) {
                    System.err.println("转换文件失败: " + svgFile.getName() + ", 错误: " + e.getMessage());
                }
            }
        }
        
        // 递归处理子目录
        File[] subdirectories = directory.listFiles(File::isDirectory);
        if (subdirectories != null) {
            for (File subdir : subdirectories) {
                convertSvgFilesInDirectory(subdir);
            }
        }
    }

    public static void main(String[] args) {
        launch(args);
    }
} 